package junior.回溯法;

public class 回溯算法框架_排列 {
    static int[] stack = new int[1000000]; // 状态位
    static int[] mData = {1,2,3}; // 状态位
    static int top = 0;
    static int total = 0;
    public static void main(String[] args) {
        long t1 = System.currentTimeMillis();
        fun1(0);
        long t2 = System.currentTimeMillis();
        System.out.println(t2-t1+" ms");
        System.out.println("total: "+total);
    }

    /**
     * n=3个元素里面取 n=3 个，进行排列（元素，可以重复，且有顺序排列）
     * @param n
     */
    public static void fun1(int n){
        if(n == 3){  // n 个元素里面选 r个元素
            for (int i = 0; i < top; i++) {
                if(stack[i] != 0){
                    System.out.print(mData[i]+" ");
                }
            }
            System.out.println();
            total++;
            return;
        }
        for (int i = 0; i <= 1; i++) {  //两个状态位，允许重复组合
                stack[top++] = i;
                fun1(n+1);
                top--;
        }
    }
}
